package xhe.lib.date;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.springframework.util.StringUtils;

/**
 * <b> 工具类: </b> 时间操作类
 * 
 * @author xhe
 * @version V1.0.0.0
 * @version --2020年1月16日
 */
public class DateTime {
	private Date _DateTime;

	/**
	 * <b> 属性: </b> 获取时间
	 * 
	 * @return Date 时间
	 */
	public Date getDateTime() {
		return this._DateTime;
	}

	/**
	 * <b> 属性: </b> 设置时间
	 * 
	 * @param date 时间
	 */
	public void setDateTime(Date date) {
		this._DateTime = date;
	}

	/**
	 * <b> 构造函数: </b> 实例化一个当前时间对象
	 */
	public DateTime() {
		this.setDateTime(now());
	}

	/**
	 * <b> 方法: </b> 获取当前系统时间
	 * 
	 * @author xhe
	 * @return 当前系统时间
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	public static Date now() {
		Date day = new Date();
		return day;
	}

	/**
	 * <b> 方法: </b> 获取当前系统时间
	 * 
	 * @author xhe
	 * @return 当前系统时间
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	public static String now(String format) {
		SimpleDateFormat df = new SimpleDateFormat(format);

		Date day = new Date();

		return df.format(day);
	}

	/**
	 * <b> 方法: </b> 将时间对象转化为yyyy-MM-dd HH:mm:ss的字符型格式
	 * 
	 * @author xhe
	 * @param date 时间
	 * @return String 格式化后的日期
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	public static String toString(Date date) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return df.format(date);
	}

	/**
	 * <b> 方法: </b> 将时间对象转化为指定格式化类型的字符型格式
	 * 
	 * @author xhe
	 * @param date   时间
	 * @param format 格式化类型
	 * @return String 转换后的时间
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	public static String toString(Date date, String format) {
		SimpleDateFormat sdfDate = new SimpleDateFormat(format);
		Calendar oCalendar = Calendar.getInstance();
		oCalendar.setTime(date);
		return sdfDate.format(oCalendar.getTime());
	}

	/**
	 * <b> 方法: </b> 将字符对象转化为指定格式化类型的字符型格式
	 * 
	 * @author xhe
	 * @param value  时间
	 * @param format 格式化类型
	 * @return String 转换后的时间
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	public static String toString(String value, String format) {
		try {

			if (!StringUtils.isEmpty(value) && !value.toLowerCase().equals("null")) {
				SimpleDateFormat sdfDate = new SimpleDateFormat(format);
				Calendar oCalendar = Calendar.getInstance();
				oCalendar.setTime(sdfDate.parse(value));

				return sdfDate.format(oCalendar.getTime());
			} else {
				return "";
			}
		} catch (Exception e) {
			return value;
		}
	}

	/**
	 * <b> 方法: </b> 将字符串转化成日期格式
	 * 
	 * @author xhe
	 * @param date 时间
	 * @return Date 日期对象
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	public static Date toDateTime(String date) {
		Date dt = new Date();
		if (!StringUtils.isEmpty(date)) {
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			try {
				dt = df.parse(date);
			} catch (Exception e) {
			}
		}

		return dt;
	}

	/**
	 * <b> 方法: </b> 获取当前时间
	 * 
	 * @author xhe
	 * @return Date 日期对象
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	@Override
	public String toString() {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return df.format(this.getDateTime());
	}

	/**
	 * <b> 方法: </b> 获取指定格式的当前时间
	 * 
	 * @author xhe
	 * @param format 格式化类型
	 * @return Date 日期对象
	 * @version V1.0.0.0
	 * @version --2020年1月16日
	 * @version --新增方法
	 */
	public String toString(String format) {
		SimpleDateFormat df = new SimpleDateFormat(format);
		return df.format(this.getDateTime());
	}
}
